ContentfulのAudit Logを有効化して監査ログを保存してみた

ContentfulのAudit Logを有効化して監査ログを保存してみた

Clock Icon2025.01.22

CMSのContentfulで、Audit Logs(監査ログ)の保存が可能になりました。
これまでは難しかった、ダッシュボードやAPIアクティビティのログが簡単に取得でき、意図しない操作の調査や対応が簡単になります。
この記事ではAudit Logsの概要、ログの内容、設定方法を紹介します。

Audit Logs でできること

ContentfulのOrganization内で行われたすべての変更を追跡できるようになります。

インシデントの調査や、関連するイベント (ロールの変更、ユーザーの招待、スペースの削除など) に関する詳細なレポートが取得できます。

ログはJSON形式です。

ログ保存先は自分で用意する必要があり、AWS S3バケットまたはAzure Blobストアが選択できます。

ログファイルの構造

イベント ログはOCSF標準に準拠しています。

ログの例

[{
    "activity_name": "Update",
    "activity_id": 3,
    "category_uid": "6",
    "class_uid": "6001",
    "type_uid": "600103",
    "time": "2024-12-23 23:37:50.174",
    "actor": {
        "type": "User",
        "id": "36YHpi7oFmocMueVN6RVcb"
    },
    "enrichments": [
        {
            "name": "http_request.url.path",
            "value": "/spaces/it0aopd16mqE/environments/master/entries/P8J72G9IxsBmVzquV3Qdd",
            "type": "spaces",
            "data": {
                "id": "it0aopd16mqE"
            }
        },
        {
            "name": "http_request.url.path",
            "value": "/spaces/it0aopd16mqE/environments/master/entries/P8J72G9IxsBmVzquV3Qdd",
            "type": "environments",
            "data": {
                "id": "master"
            }
        },
        {
            "name": "http_request.url.path",
            "value": "/spaces/it0aopd16mqE/environments/master/entries/P8J72G9IxsBmVzquV3Qdd",
            "type": "entries",
            "data": {
                "id": "P8J72G9IxsBmVzquV3Qdd"
            }
        }
    ],
    "severity_id": 0,
    "http_request": {
        "args": "",
        "http_method": "PUT",
        "referrer": "",
        "url": {
            "path": "/spaces/it0aopd16mqE/environments/master/entries/P8J72G9IxsBmVzquV3Qdd"
        }
    },
    "http_response": {
        "code": 200
    },
    "web_resources": [
        {
            "type": "Entry",
            "uid": "P8J72G9IxsBmVzquV3Qdd"
        }
    ],
    "metadata": {
        "version": "1.3.0",
        "uid": "bd25f7ec-4e70-4f4f-885e-f370f7d0b5fd"
    }
}, ...]

主要な属性

  • activity_id ... activity_name とセットでイベントの種類(更新/削除/...)を表す(イベントごとのユニークIDではないので注意)
  • category_uid ... イベントのカテゴリ。現時点では固定値 6 = Application Activity が返却される
  • http_request ... イベントの元になるHTTPリクエスト。リクエストメソッド、対象パスなどを含む
  • http_response ... リクエストに対して返却された成功ステータスなど
  • enrichments ... リクエスト対象リソースの構造化された詳細。上記例では対象Space, Environment, Entry情報が格納されている
  • severity_id ... 数値が小さいほど重大度が低い。現時点では固定値 0 が返却される

ログファイルの命名規則

audit-log-{organization_id}-{date}-{timestamp}.json

配信タイミング

ドキュメントでは「毎日」の配信となっています。
私のOrganizationの場合、毎日 04:00 AM (UTC) 頃に配信されていました。

設定の流れ

Amazon S3を使って設定してみました。

AWS側の設定

1. S3バケットの作成

バケット名、リージョンは何でも大丈夫です。

2. IAMポリシーの作成

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<Your-S3-Bucket-Name>/*"
    }
  ]
}

3. IAMロールの作成

先に作成したポリシーをロールにアタッチします。

また [信頼関係] の [信頼されたエンティティ] として下記信頼ポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::606137763417:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "<Your-Contentful-Organization-ID>"
                }
            }
        }
    ]
}

606137763417 はContentfulのAWSアカウントIDを示す固定値です。

4. S3バケットポリシー

S3 に移動し、バケットポリシーを設定します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "<Your-IAM-Role-ARN>"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<Your-S3-Bucket-Name>/*"
    }
  ]
}

以上でAWS側の設定は完了です。

Contentful側の設定

1. Organziation ダッシュボードのAudit Logsに移動

scr1

2. AWSリソース情報の入力

ガイドに従って、先ほど作成したAWSリソースの情報を入力します。

Screenshot 2025-01-21 at 16.41.18

以上で全ての設定は完了です。

注意

  • 現時点で、Audit Logsは Orgnization単位 で有効化できます。Space単位で切り出したい場合、自分でデータを加工する必要があります。
  • Audit Logsは特定のプランでのみ利用可能です。詳細については弊社までお問い合わせください。

参考情報

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.